//例如：（map方法：遍历数组，es5新增）
let arr=[1,2,3].map(x => x + 1);
console.log(arr)  //[ 2, 3, 4 ]
   
//等同于：
var brr=[1,2,3].map((function(x){
    return x + 1
}).bind(this));
console.log(brr)

/*-------------------------------------*/
//当你的函数有且仅有一个参数可以省略掉括号
//当你函数返回有且仅有一个表达式的时候可以省略{} 和 return；
var people = name => 'hello' + name
console.log(people('张三'))
//参数name就没有括号
//作为参考,以下为两个参数，多个表达式
var people = (name, age) => {
    const fullName = 'hello' + name
    return fullName
} 
console.log(people('张三'))
//如果缺少()或者{}就会报错

//箭头函数可以解决this指向的问题
//箭头函数this是定义函数所在的对象，不是运行时所在的对象
let json = {
	a:1,
	show() {
		setTimeout(function() {
			console.log(this.a)  //this指向不是当前对象本身
		},2000)
	},
	show2(){
		setTimeout(()=>{
			console.log(this.a)  //this指向是当前对象本身
		},2000)
	}
}
json.show() //undefined 
json.show2() //1

//箭头函数中没有arguments参数，可以用...扩展运算符
let args = (...args)=>{
	console.log(args)
}
args(1,2,3,4,5)  //[ 1, 2, 3, 4, 5 ]

//箭头函数不能当构造函数用，不能用new去执行，而普通函数可以
function FN(){
	console.log('执行了')
	this.a='执行了a'
}
new FN()  //执行了
console.log(new FN().a)  //执行了 //执行了a
/*--------------------------------------------*/
// 请使用ES6重构以下代码
function fn(x, y, z) {
  if (typeof x != 'number') { x = 0 }
  if (typeof y != 'number') { y = 6 }

  var dwt = x % y
  var result

  if (dwt == z) { result = true }
  if (dwt != z) { result = false }
  
  return result
}
//es6
const fn1 = (x, y, z) => {
  x = typeof x !== 'number' ? 0 : x
  y = typeof y !== 'number' ? 6 : y
  return x % y === z
}
